parser grammar GDLParser;

options {
  language = Java;
  tokenVocab = GDLlexer;
}
@header {
package PL.prac6;
}
@members {
//nodos
  boolean title = true;
  boolean label = true;
  boolean borderstyle = true;
//aristas
  boolean source = true;
  boolean target = true;
  boolean arrowstyle = true;
}

@rulecatch {catch (RecognitionException e) {
  throw e;}
 }
entrada: grafo EOF;
grafo: GRAPH DOSPUNTOS ALLAVE (arista| nodo)+ CLLAVE;

arista: {arrowstyle = true; source = true; target = true;} EDGE DOSPUNTOS ALLAVE atrarista+ CLLAVE;
atrarista:({arrowstyle}? arrow | {source}? sour | {target}? tar);
arrow: ARROWSTYLE DOSPUNTOS TIPOSARROW {arrowstyle = false;};
sour: SOURCE DOSPUNTOS CADENA {source = false;};
tar: TARGET DOSPUNTOS CADENA {target = false;};

nodo: {borderstyle = true; title = true; label = true;} NODE DOSPUNTOS ALLAVE atrnodo+ CLLAVE;
atrnodo: ({title}? tit | {label}? lab | {borderstyle}? border);
tit: TITLE DOSPUNTOS CADENA {title = false;};
lab: LABEL DOSPUNTOS CADENA {label = false;};
border: BORDERSTYLE DOSPUNTOS TIPOSBORDER {borderstyle = false;};
